Skip to content

Add Windows build system#28

Open
Eclips4 wants to merge 12 commits intoRust-for-CPython:3.15-rust-in-cpythonfrom
Eclips4:windows-build-system
Open

Add Windows build system#28
Eclips4 wants to merge 12 commits intoRust-for-CPython:3.15-rust-in-cpythonfrom
Eclips4:windows-build-system

Conversation

@Eclips4
Copy link
Copy Markdown
Member

@Eclips4 Eclips4 commented Mar 18, 2026

No description provided.

@Eclips4 Eclips4 marked this pull request as draft March 18, 2026 19:16
@Eclips4 Eclips4 changed the title Initial approach Add Windows build system Mar 18, 2026
@Eclips4 Eclips4 marked this pull request as ready for review March 18, 2026 21:49
Copy link
Copy Markdown

@sergey-miryanov sergey-miryanov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, two nitpicks.

@emmatyping
Copy link
Copy Markdown

emmatyping commented Mar 30, 2026

I seem to have run into a build failure due to Rust and bindgen finding different clang installations:

Error log

     Compiling cpython-sys v0.1.0 (C:\Users\emma\cpython\Modules\cpython-sys)
EXEC : error : failed to run custom build command for `cpython-sys v0.1.0 (C:\Users\emma\cpython\Modules\cpython-sys
)` [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]

  Caused by:
    process didn't exit successfully: `C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo\release\buil
  d\cpython-sys-2171eb3b03e2f1d4\build-script-build` (exit code: 101)
    --- stdout
    cargo:rerun-if-env-changed=IPHONEOS_DEPLOYMENT_TARGET
    cargo:rerun-if-env-changed=LLVM_TARGET
    cargo:rerun-if-env-changed=PY_DEBUG
    cargo:rerun-if-env-changed=PY_GIL_DISABLED
    cargo:rerun-if-env-changed=PYTHON_BUILD_DIR
    cargo:rerun-if-env-changed=PY_CC
    cargo:rerun-if-env-changed=PY_CPPFLAGS
    cargo:rerun-if-env-changed=PY_CFLAGS
    cargo:rerun-if-env-changed=TARGET
    cargo:rerun-if-env-changed=WASI_SDK_PATH
    cargo:rerun-if-changed=C:\Users\emma\cpython\PC\Makefile
    cargo::rustc-check-cfg=cfg(py_gil_disabled)
    cargo:rerun-if-env-changed=TARGET
    cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_x86_64-pc-windows-msvc
    cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_x86_64_pc_windows_msvc
    cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS
    cargo:rerun-if-changed=wrapper.h

    --- stderr
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(855,10): error G86F0DC91: invalid conversion between vec
tor type '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(883,10): error G86F0DC91: invalid conversion between vec
tor type '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(911,10): error G86F0DC91: invalid conversion between vec
tor type '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(941,10): error G86F0DC91: invalid conversion between vec
tor type '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(972,10): error G86F0DC91: invalid conversion between vec
tor type '__m128bh' (vector of 8 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\PC
build\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(1000,10): error G86F0DC91: invalid conversion between ve
ctor type '__m128bh' (vector of 8 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(1028,10): error G86F0DC91: invalid conversion between ve
ctor type '__m128bh' (vector of 8 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(1056,10): error G86F0DC91: invalid conversion between ve
ctor type '__m128bh' (vector of 8 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2convertintrin.h(181,78): error GCBBB3098: too few arguments to functi
on call, expected 5, have 4 [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2convertintrin.h(225,61): error GCBBB3098: too few arguments to functi
on call, expected 5, have 4 [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2convertintrin.h(267,77): error GCBBB3098: too few arguments to functi
on call, expected 5, have 4 [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(95,11): error G86F0DC91: invalid conversion between
vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyth
on\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(101,11): error G86F0DC91: invalid conversion between
 vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(107,11): error G86F0DC91: invalid conversion between
 vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(133,11): error G86F0DC91: invalid conversion between
 vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(139,11): error G86F0DC91: invalid conversion between
 vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(145,11): error G86F0DC91: invalid conversion between
 vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(171,11): error G86F0DC91: invalid conversion between
 vector type '__m256i' (vector of 4 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(177,11): error G86F0DC91: invalid conversion between
 vector type '__m256i' (vector of 4 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
EXEC : fatal error : too many errors emitted, stopping now [-ferror-limit=] [C:\Users\emma\cpython\PCbuild\_base64.v
cxproj]

    thread 'main' (26756) panicked at Modules\cpython-sys\build.rs:237:10:
Unable to generate bindings: ClangDiagnostic("C:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2bf16intrin.h:855
:10: error: invalid conversion between vector type '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of
different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2bf16intrin.h(883,10): error G86F0DC91: invalid
 conversion between vector type '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of different size\nC:\
\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2bf16intrin.h:911:10: error: invalid conversion between vector typ
e '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\cla
ng\\21\\include\\avx10_2bf16intrin.h:941:10: error: invalid conversion between vector type '__m256bh' (vector of 16 '__
bf16' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2bf16in
trin.h:972:10: error: invalid conversion between vector type '__m128bh' (vector of 8 '__bf16' values) and integer type
'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2bf16intrin.h:1000:10: error: invalid
conversion between vector type '__m128bh' (vector of 8 '__bf16' values) and integer type 'int' of different size\nC:\\P
rogram Files\\LLVM\\lib\\clang\\21\\include\\avx10_2bf16intrin.h:1028:10: error: invalid conversion between vector type
 '__m128bh' (vector of 8 '__bf16' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang
\\21\\include\\avx10_2bf16intrin.h:1056:10: error: invalid conversion between vector type '__m128bh' (vector of 8 '__bf
16' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2converti
ntrin.h:181:78: error: too few arguments to function call, expected 5, have 4\nC:\\Program Files\\LLVM\\lib\\clang\\21\
\include\\avx10_2convertintrin.h:225:61: error: too few arguments to function call, expected 5, have 4\nC:\\Program Fil
es\\LLVM\\lib\\clang\\21\\include\\avx10_2convertintrin.h:267:77: error: too few arguments to function call, expected 5
, have 4\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2satcvtdsintrin.h:95:11: error: invalid conversion be
tween vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size\nC:\\Program File
s\\LLVM\\lib\\clang\\21\\include\\avx10_2satcvtdsintrin.h:101:11: error: invalid conversion between vector type '__m128
i' (vector of 2 'long long' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\
include\\avx10_2satcvtdsintrin.h:107:11: error: invalid conversion between vector type '__m128i' (vector of 2 'long lon
g' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2satcvtdsi
ntrin.h:133:11: error: invalid conversion between vector type '__m128i' (vector of 2 'long long' values) and integer ty
pe 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2satcvtdsintrin.h:139:11: error: in
valid conversion between vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different siz
e\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2satcvtdsintrin.h:145:11: error: invalid conversion between
vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size\nC:\\Program Files\\LLV
M\\lib\\clang\\21\\include\\avx10_2satcvtdsintrin.h:171:11: error: invalid conversion between vector type '__m256i' (ve
ctor of 4 'long long' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\includ
e\\avx10_2satcvtdsintrin.h:177:11: error: invalid conversion between vector type '__m256i' (vector of 4 'long long' val
ues) and integer type 'int' of different size\nfatal error: too many errors emitted, stopping now [-ferror-limit=]\n")
[C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: The command "setlocal [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if "Release"=="Debug" (set "PY_DEBUG=1") else (set "PY_DEBUG=") [C:\Users\emma\cpython\PCbuild\_base64.vcx
proj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if ""=="true" (set "PY_GIL_DISABLED=1") else (set "PY_GIL_DISABLED=") [C:\Users\emma\cpython\PCbuild\_base
64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: where cargo >NUL 2>NUL || (echo WARNING: cargo was not found on PATH, skipping _base64 & exit /b 0) [C:\Users
\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if not "C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\Llvm\x64\bin"=="" set "LIBCLANG_PATH=C
:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\Llvm\x64\bin" [C:\Users\emma\cpython\PCbuild\_base64.v
cxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if "C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\Llvm\x64\bin"=="" if not defined LIBCLANG_
PATH (echo WARNING: libclang was not found, skipping _base64 & exit /b 0) [C:\Users\emma\cpython\PCbuild\_base64.vcx
proj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if defined LIBCLANG_PATH if not exist "%LIBCLANG_PATH%\libclang.dll" if not exist "%LIBCLANG_PATH%\clang.dll"
 (echo WARNING: libclang.dll not found at %LIBCLANG_PATH%, skipping _base64 & exit /b 0) [C:\Users\emma\cpython\PCbu
ild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if not exist "C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo" mkdir "C:\Users\emma\cp
ython\PCbuild\obj\315amd64_Release\_base64\cargo" [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: set "CARGO_TARGET_DIR=C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo" [C:\Users\emma\
cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: set "PYTHON_BUILD_DIR=C:\Users\emma\cpython\PC" [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: set "LIBPYTHON="/LIBPATH:C:\Users\emma\cpython\PCbuild\amd64" "python315.lib"" [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: cargo build --lib --locked --package _base64 --manifest-path "C:\Users\emma\cpython\Cargo.toml" --profile
release --target x86_64-pc-windows-msvc [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if errorlevel 1 exit /b 1 [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if not exist "C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo\x86_64-pc-windows-msvc\rele
ase\_base64.dll" (echo ERROR: cargo did not produce C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo
\x86_64-pc-windows-msvc\release\_base64.dll & exit /b 1) [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: copy /Y "C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo\x86_64-pc-windows-msvc\release\_
base64.dll" "C:\Users\emma\cpython\PCbuild\amd64\_base64.pyd" >NUL [C:\Users\emma\cpython\PCbuild\_base64.vcxproj
]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if errorlevel 1 exit /b 1 [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if exist "C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo\x86_64-pc-windows-msvc\release\
_base64.pdb" copy /Y "C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo\x86_64-pc-windows-msvc\releas
e\_base64.pdb" "C:\Users\emma\cpython\PCbuild\amd64\_base64.pdb" >NUL" exited with code 1. [C:\Users\emma\cpython
\PCbuild\_base64.vcxproj]

Build FAILED.

EXEC : error : failed to run custom build command for `cpython-sys v0.1.0 (C:\Users\emma\cpython\Modules\cpython-sys
)` [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(855,10): error G86F0DC91: invalid conversion between vec
tor type '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(883,10): error G86F0DC91: invalid conversion between vec
tor type '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(911,10): error G86F0DC91: invalid conversion between vec
tor type '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(941,10): error G86F0DC91: invalid conversion between vec
tor type '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(972,10): error G86F0DC91: invalid conversion between vec
tor type '__m128bh' (vector of 8 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\PC
build\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(1000,10): error G86F0DC91: invalid conversion between ve
ctor type '__m128bh' (vector of 8 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(1028,10): error G86F0DC91: invalid conversion between ve
ctor type '__m128bh' (vector of 8 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2bf16intrin.h(1056,10): error G86F0DC91: invalid conversion between ve
ctor type '__m128bh' (vector of 8 '__bf16' values) and integer type 'int' of different size [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2convertintrin.h(181,78): error GCBBB3098: too few arguments to functi
on call, expected 5, have 4 [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2convertintrin.h(225,61): error GCBBB3098: too few arguments to functi
on call, expected 5, have 4 [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2convertintrin.h(267,77): error GCBBB3098: too few arguments to functi
on call, expected 5, have 4 [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(95,11): error G86F0DC91: invalid conversion between
vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyth
on\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(101,11): error G86F0DC91: invalid conversion between
 vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(107,11): error G86F0DC91: invalid conversion between
 vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(133,11): error G86F0DC91: invalid conversion between
 vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(139,11): error G86F0DC91: invalid conversion between
 vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(145,11): error G86F0DC91: invalid conversion between
 vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(171,11): error G86F0DC91: invalid conversion between
 vector type '__m256i' (vector of 4 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
C:\Program Files\LLVM\lib\clang\21\include\avx10_2satcvtdsintrin.h(177,11): error G86F0DC91: invalid conversion between
 vector type '__m256i' (vector of 4 'long long' values) and integer type 'int' of different size [C:\Users\emma\cpyt
hon\PCbuild\_base64.vcxproj]
EXEC : fatal error : too many errors emitted, stopping now [-ferror-limit=] [C:\Users\emma\cpython\PCbuild\_base64.v
cxproj]
Unable to generate bindings: ClangDiagnostic("C:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2bf16intrin.h:855
:10: error: invalid conversion between vector type '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of
different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2bf16intrin.h(883,10): error G86F0DC91: invalid
 conversion between vector type '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of different size\nC:\
\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2bf16intrin.h:911:10: error: invalid conversion between vector typ
e '__m256bh' (vector of 16 '__bf16' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\cla
ng\\21\\include\\avx10_2bf16intrin.h:941:10: error: invalid conversion between vector type '__m256bh' (vector of 16 '__
bf16' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2bf16in
trin.h:972:10: error: invalid conversion between vector type '__m128bh' (vector of 8 '__bf16' values) and integer type
'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2bf16intrin.h:1000:10: error: invalid
conversion between vector type '__m128bh' (vector of 8 '__bf16' values) and integer type 'int' of different size\nC:\\P
rogram Files\\LLVM\\lib\\clang\\21\\include\\avx10_2bf16intrin.h:1028:10: error: invalid conversion between vector type
 '__m128bh' (vector of 8 '__bf16' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang
\\21\\include\\avx10_2bf16intrin.h:1056:10: error: invalid conversion between vector type '__m128bh' (vector of 8 '__bf
16' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2converti
ntrin.h:181:78: error: too few arguments to function call, expected 5, have 4\nC:\\Program Files\\LLVM\\lib\\clang\\21\
\include\\avx10_2convertintrin.h:225:61: error: too few arguments to function call, expected 5, have 4\nC:\\Program Fil
es\\LLVM\\lib\\clang\\21\\include\\avx10_2convertintrin.h:267:77: error: too few arguments to function call, expected 5
, have 4\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2satcvtdsintrin.h:95:11: error: invalid conversion be
tween vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size\nC:\\Program File
s\\LLVM\\lib\\clang\\21\\include\\avx10_2satcvtdsintrin.h:101:11: error: invalid conversion between vector type '__m128
i' (vector of 2 'long long' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\
include\\avx10_2satcvtdsintrin.h:107:11: error: invalid conversion between vector type '__m128i' (vector of 2 'long lon
g' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2satcvtdsi
ntrin.h:133:11: error: invalid conversion between vector type '__m128i' (vector of 2 'long long' values) and integer ty
pe 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2satcvtdsintrin.h:139:11: error: in
valid conversion between vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different siz
e\nC:\\Program Files\\LLVM\\lib\\clang\\21\\include\\avx10_2satcvtdsintrin.h:145:11: error: invalid conversion between
vector type '__m128i' (vector of 2 'long long' values) and integer type 'int' of different size\nC:\\Program Files\\LLV
M\\lib\\clang\\21\\include\\avx10_2satcvtdsintrin.h:171:11: error: invalid conversion between vector type '__m256i' (ve
ctor of 4 'long long' values) and integer type 'int' of different size\nC:\\Program Files\\LLVM\\lib\\clang\\21\\includ
e\\avx10_2satcvtdsintrin.h:177:11: error: invalid conversion between vector type '__m256i' (vector of 4 'long long' val
ues) and integer type 'int' of different size\nfatal error: too many errors emitted, stopping now [-ferror-limit=]\n")
[C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: The command "setlocal [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if "Release"=="Debug" (set "PY_DEBUG=1") else (set "PY_DEBUG=") [C:\Users\emma\cpython\PCbuild\_base64.vcx
proj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if ""=="true" (set "PY_GIL_DISABLED=1") else (set "PY_GIL_DISABLED=") [C:\Users\emma\cpython\PCbuild\_base
64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: where cargo >NUL 2>NUL || (echo WARNING: cargo was not found on PATH, skipping _base64 & exit /b 0) [C:\Users
\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if not "C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\Llvm\x64\bin"=="" set "LIBCLANG_PATH=C
:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\Llvm\x64\bin" [C:\Users\emma\cpython\PCbuild\_base64.v
cxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if "C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\Llvm\x64\bin"=="" if not defined LIBCLANG_
PATH (echo WARNING: libclang was not found, skipping _base64 & exit /b 0) [C:\Users\emma\cpython\PCbuild\_base64.vcx
proj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if defined LIBCLANG_PATH if not exist "%LIBCLANG_PATH%\libclang.dll" if not exist "%LIBCLANG_PATH%\clang.dll"
 (echo WARNING: libclang.dll not found at %LIBCLANG_PATH%, skipping _base64 & exit /b 0) [C:\Users\emma\cpython\PCbu
ild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if not exist "C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo" mkdir "C:\Users\emma\cp
ython\PCbuild\obj\315amd64_Release\_base64\cargo" [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: set "CARGO_TARGET_DIR=C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo" [C:\Users\emma\
cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: set "PYTHON_BUILD_DIR=C:\Users\emma\cpython\PC" [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: set "LIBPYTHON="/LIBPATH:C:\Users\emma\cpython\PCbuild\amd64" "python315.lib"" [C:\Users\emma\cpython\P
Cbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: cargo build --lib --locked --package _base64 --manifest-path "C:\Users\emma\cpython\Cargo.toml" --profile
release --target x86_64-pc-windows-msvc [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if errorlevel 1 exit /b 1 [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if not exist "C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo\x86_64-pc-windows-msvc\rele
ase\_base64.dll" (echo ERROR: cargo did not produce C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo
\x86_64-pc-windows-msvc\release\_base64.dll & exit /b 1) [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: copy /Y "C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo\x86_64-pc-windows-msvc\release\_
base64.dll" "C:\Users\emma\cpython\PCbuild\amd64\_base64.pyd" >NUL [C:\Users\emma\cpython\PCbuild\_base64.vcxproj
]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if errorlevel 1 exit /b 1 [C:\Users\emma\cpython\PCbuild\_base64.vcxproj]
C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(45,5): error
 MSB3073: if exist "C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo\x86_64-pc-windows-msvc\release\
_base64.pdb" copy /Y "C:\Users\emma\cpython\PCbuild\obj\315amd64_Release\_base64\cargo\x86_64-pc-windows-msvc\releas
e\_base64.pdb" "C:\Users\emma\cpython\PCbuild\amd64\_base64.pdb" >NUL" exited with code 1. [C:\Users\emma\cpython
\PCbuild\_base64.vcxproj]
    0 Warning(s)
    23 Error(s)

Time Elapsed 00:00:52.82

The following patch should fix it however:

diff --git a/Modules/cpython-sys/build.rs b/Modules/cpython-sys/build.rs
index c34b99a771..03335128e9 100644
--- a/Modules/cpython-sys/build.rs
+++ b/Modules/cpython-sys/build.rs
@@ -56,6 +56,13 @@ fn emit_rerun_instructions(builddir: Option<&str>) {
 /// headers.  We pass -resource-dir to bindgen's clang so it picks up those
 /// headers instead of the broken libclang-18 ones.
 fn newest_clang_resource_dir() -> Option<PathBuf> {
+    // On Windows, derive the resource directory from LIBCLANG_PATH so that
+    // bindgen uses headers matching the libclang.dll it loads, rather than
+    // picking up a different, incompatible, system LLVM installation
+    if cfg!(windows) {
+        return clang_resource_dir_from_libclang_path();
+    }
+
     let base = Path::new("/usr/lib");
     let mut best: Option<(u32, PathBuf)> = None;
     for entry in std::fs::read_dir(base).ok()?.flatten() {
@@ -76,6 +83,34 @@ fn newest_clang_resource_dir() -> Option<PathBuf> {
     best.map(|(_, p)| p)
 }

+/// Derive the clang resource directory from LIBCLANG_PATH.
+///
+/// When LIBCLANG_PATH points to e.g. `...\bin`, the resource directory is
+/// at `...\lib\clang\<version>`.  We pick the highest version found.
+fn clang_resource_dir_from_libclang_path() -> Option<PathBuf> {
+    let libclang_path = env::var("LIBCLANG_PATH").ok()?;
+    let bin_dir = Path::new(&libclang_path);
+    // LIBCLANG_PATH typically points to a `bin` directory; the resource
+    // dir lives under the sibling `lib/clang/<version>`.
+    let clang_lib_dir = bin_dir.parent()?.join("lib").join("clang");
+    let mut best: Option<(u32, PathBuf)> = None;
+    for entry in std::fs::read_dir(&clang_lib_dir).ok()?.flatten() {
+        let name = entry.file_name();
+        let name = name.to_string_lossy();
+        // Version directories can be just a major number (e.g. "18") or
+        // a full dotted version (e.g. "18.1.3"). Parse the major part.
+        if let Ok(ver) = name.split('.').next().unwrap_or("").parse::<u32>() {
+            let resource_dir = entry.path();
+            if resource_dir.join("include").is_dir()
+                && best.as_ref().map_or(true, |(v, _)| ver > *v)
+            {
+                best = Some((ver, resource_dir));
+            }
+        }
+    }
+    best.map(|(_, p)| p)
+}
+
 fn gil_disabled(srcdir: &Path, builddir: Option<&str>) -> bool {
     if env_var_is_truthy("PY_GIL_DISABLED") {
         return true;

I also expect we will need to install LLVM via the external dependencies system eventually. The JIT currently downloads LLVM21 so we probably want to do similarly for the bindings. That may make the above issue not a concern if we can just load libclang from the downloaded copy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants